﻿#define _CRT_SECURE_NO_WARNINGS 1

//int a = 248, b = 4;
//int const* c = 21;
//const int* d = &a;
//int* const e = &b;
//int const* const f = &a;


//3、以下程序的输出结果为（ ）

//#include <stdio.h>
//int i;
//void prt()
//{
//	for (i = 5; i < 8; i++)
//		printf("%c", '*');
//	printf("\t1");
//}
//int main()
//{
//	for (i = 5; i <= 8; i++)
//		prt();
//	return 0;
//}
//答案解析：
//正确答案：A
//全局变量i，在main()中修改为5，第一次在prt()中执行循环输出三次'*'，i被修改为8，
//     回到main()中第二次调用prt()时，i < 8为假，循环结束没输出，
//	执行一次print("\t")，再次回到主函数后i++变为9，i <= 8为假，循环结束;



//4、下面代码段的输出是（ ）
#include<stdio.h>
int main()
{
	int a = 3;
	printf("%d\n", (a += a -= a * a));
	return 0;
}


//## 📌记负均正
//【牛客网链接：[HJ97 记负均正](https://www.nowcoder.com/practice/6abde6ffcc354ea1a8333836bd6876b8?tpId=37&&tqId=21320&rp=1&ru=/ta/huawei&qru=/ta/huawei/question-ranking)】

#include <stdio.h>
int main()
{
	int n;
	while (~scanf("%d", &n))//多组输入 （也可以写成 scanf("%d",&n)!=EOF ）
	{
		int count1 = 0, count2 = 0, tmp;
		double sum = 0;
		for (int i = 0; i < n; i++)
		{
			scanf("%d", &tmp);//对每次输入的整数进行判断
			if (tmp < 0)
			{
				count1++; //统计负数个数
			}
			else if (tmp > 0)
			{
				sum += tmp; //正数求和
				count2++; //统计大于0的正数个数，这样是因为题目说明0不算在内
			}
		}
		printf("%d ", count1);
		if (count2 == 0)//如果没有正数，则平均值为0 
		{
			printf("%.1lf\n", 0.0);
		}
		else//若有正数，则平均值为所有正数的和除以正数的个数
		{
			printf("%.1lf\n", sum / count2);
		}
	}
	return 0;
}


//## 📌旋转数组的最小数字
//【牛客网链接：[JZ11 旋转数组的最小数字](https://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba?tpId=13&tqId=23269&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking)】
 //暴力破解：遍历数组找出最小值即可
int minNumberInRotateArray(int* nums, int numsLen) {
	int i = 0;
	for (i = 0; i < numsLen - 1; i++)
	{
		if (nums[i] > nums[i + 1])//只要出现降序则说明出现了最小值,比如[4,5,1,2,3] ：5到1是降序，则1就是最小值；
			return nums[i + 1];
	}
	return nums[0];//如果没出现降序，说明没旋转，则第一个数就是最小值。
}

//更优思想：采用二分查找
int minNumberInRotateArray(int* nums, int numsLen) {
	int left = 0;
	int right = numsLen - 1;
	while (left < right)
	{
		int mid = left + (right - left) / 2;//避免整数溢出
		if (nums[mid] > nums[right])
		{
			left = mid + 1;//最小值在[left+1,right]
		}
		else if (nums[mid] == nums[right])
		{
			right--;//缩短数组，将最小值范围右移
		}
		else
		{
			right = mid;//最小值在[left,mid]
		}
	}
	return nums[left];
}